/*
 *  Vector.h
 *  T3nsors
 *
 *  Created by Michael Barriault on 10-09-23.
 *  Copyright 2010 MikBarr. All rights reserved.
 *
 */

#pragma once

#include <T3nsors/Scalar.h>

namespace T3 {
	class Vector {
	private:
		std::vector<T3::Scalar> T;
	public:
		std::string id;
		T3::Domain O;
		int N;
		Vector(void);
		Vector(int, std::string iid="");
		Vector(Domain,int,std::string iid="");
		Scalar& operator()(int);
		Vector& operator+=(Vector&);
		operator Scalar();
		real rad(int);
	};
}

T3::Vector operator-(T3::Vector);
T3::Vector operator+(T3::Vector, T3::Vector);
T3::Vector operator-(T3::Vector, T3::Vector);
T3::Scalar operator*(T3::Vector, T3::Vector);
T3::Vector operator%(T3::Vector, T3::Vector);
T3::Vector operator*(T3::Scalar, T3::Vector);
T3::Vector operator*(T3::Vector, T3::Scalar);
T3::Vector operator*(T3::Vector, real);
T3::Vector operator*(real, T3::Vector);
T3::Vector operator/(T3::Vector, T3::Scalar);
T3::Vector operator/(T3::Vector, real);

T3::Vector diff(T3::Scalar);
T3::Scalar diss(T3::Scalar x);
T3::Vector diss(T3::Vector x);
T3::Vector LinCom(real,T3::Vector,real,T3::Vector,std::string id="");
T3::Vector LinCom(real,T3::Vector,real,T3::Vector,real,T3::Vector,std::string id="");
T3::Vector LinCom(real,T3::Vector,real,T3::Vector,real,T3::Vector,real,T3::Vector,std::string id="");
T3::Vector LinCom(real,T3::Vector,real,T3::Vector,real,T3::Vector,real,T3::Vector,real,T3::Vector,std::string id="");
